home *** CD-ROM | disk | FTP | other *** search
/ PC-SIG: World of Games / PC-SIG World of Games (CDRM1080710) (1993).iso / ENT / DISK0035.ZIP / MEMORY.BAS < prev    next >
BASIC Source File  |  1983-04-02  |  10KB  |  370 lines

  1. 10 KEY OFF:CLS
  2. 20 SCREEN 0
  3. 30 WIDTH 40
  4. 40 PRINT"░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░"
  5. 50 PRINT"░┌───────────────────────────────────┐░"
  6. 60 PRINT"░│                                   │░"
  7. 70 PRINT"░│            5011-A.BAS             │░"
  8. 80 PRINT"░│              MEMORY               │░"
  9. 90 PRINT"░│                                   │░"
  10. 100 PRINT"░│                                   │░"
  11. 110 PRINT"░│ BROUGHT TO YOU BY THE MEMBERS OF  │░"
  12. 120 PRINT"░│      ▄▄▄▄▄ ▄▄▄▄▄ ▄▄▄▄▄ ▄▄▄▄▄      │░"
  13. 130 PRINT"░│        █   █   █ █     █   █      │░"
  14. 140 PRINT"░│        █   █▄▄▄█ █     █   █      │░"
  15. 150 PRINT"░│        █   █     █     █   █      │░"
  16. 160 PRINT"░│      ▄▄█▄▄ █     █▄▄▄▄ █▄▄▄█      │░"
  17. 170 PRINT"░│                                   │░"
  18. 180 PRINT"░│      International PC Owners      │░"
  19. 190 PRINT"░│                                   │░"
  20. 200 PRINT"░│P.O. Box 10426, Pittsburgh PA 15234│░"
  21. 210 PRINT"░│                                   │░"
  22. 220 PRINT"░└───────────────────────────────────┘░"
  23. 230 PRINT"░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░"
  24. 240 PRINT
  25. 250 PRINT "       PRESS ANY KEY TO CONTINUE
  26. 260 A$=INKEY$: IF A$="" THEN 260
  27. 270 WIDTH 80
  28. 280 CLS
  29. 1000 REM --- MEMORY -- WITH BLOCK LETTER CHARACTERS FOR TITLE
  30. 1010 DEFINT A-Z
  31. 1020 DIM COLMASK(8)
  32. 1030 FOR I = 1 TO 8
  33. 1040 COLMASK(I) = 2^(8-I)
  34. 1050 NEXT I
  35. 1060 DOTCHAR = 219
  36. 1070 DOT$ = STRING$(1,DOTCHAR)
  37. 1080 DEF SEG = &HF000
  38. 1090 BASEADR = &HFA6E
  39. 1100 KEY OFF
  40. 1110 REM --- MAIN LOOP
  41. 1120 CLS
  42. 1130 A$ = "MEMORY"
  43. 1140 CLS
  44. 1150 FOR I = 1 TO 6
  45. 1160 CHAR$ = MID$(A$,I,1)
  46. 1170 CODE = ASC(CHAR$)
  47. 1180 IF CODE >= 128 THEN BEEP : GOTO 1110
  48. 1190 ADR = BASEADR + CODE*8
  49. 1200 REM --- SUBROUTINE TO DISPLAY CHARACTER
  50. 1210 FOR ROW = 1 TO 8
  51. 1220   ROWVAL = PEEK(ADR + (ROW-1))
  52. 1230   FOR COL = 1 TO 8
  53. 1240     COLMASK = COLMASK(COL)
  54. 1250     IF (ROWVAL AND COLMASK) = 0 THEN 1290
  55. 1260     REM --- LOCATE TO BIT POSITION AND DISPLAY GIANT PIXEL
  56. 1270     LOCATE (ROW+8), 1 + (COL-1) + (I-1)*8
  57. 1280     PRINT DOT$;
  58. 1290   NEXT COL
  59. 1300 NEXT ROW
  60. 1310 NEXT I
  61. 1320 LOCATE 18,1
  62. 1330 PRINT "WHICH GAME DO YOU WANT TO PLAY"
  63. 1340 PRINT "   1) MEMORY USING NUMBERS"
  64. 1350 PRINT "   2) MEMORY USING SYMBOLS"
  65. 1360 A$ = INPUT$(1)
  66. 1370 IF A$ = "1" THEN 1400
  67. 1380 IF A$ = "2" THEN 1420
  68. 1390 GOTO 1360
  69. 1400 FIRST = 1
  70. 1410 GOTO 1430
  71. 1420 FIRST = 2
  72. 1430 DIM TUBE(5,8), SET(40)
  73. 1440 CLS
  74. 1450 REM --- DRAW OUTSIDE EDGE
  75. 1460 H = 20
  76. 1470 W = 79
  77. 1480 R = 1
  78. 1490 C = 1
  79. 1500 GOSUB 1860         ''' TOP SIDE
  80. 1510 GOSUB 2000         ''' RIGHT SIDE
  81. 1520 GOSUB 2080         ''' BOTTOM SIDE
  82. 1530 GOSUB 2160         ''' LEFT SIDE
  83. 1540 LOCATE R,C
  84. 1550 PRINT CHR$(201)
  85. 1560 R = 5
  86. 1570 GOSUB 1910         ''' ACROSS
  87. 1580 R = 9
  88. 1590 GOSUB 1910         ''' ACROSS
  89. 1600 R = 13
  90. 1610 GOSUB 1910         ''' ACROSS
  91. 1620 R = 17
  92. 1630 GOSUB 1910         ''' ACROSS
  93. 1640 R = 1
  94. 1650 C = 10
  95. 1660 GOSUB 2200         ''' UP
  96. 1670 C = 20
  97. 1680 GOSUB 2200         ''' UP
  98. 1690 C = 30
  99. 1700 GOSUB 2200         ''' UP
  100. 1710 C = 40
  101. 1720 GOSUB 2200         ''' UP
  102. 1730 C = 50
  103. 1740 GOSUB 2200         ''' UP
  104. 1750 C = 60
  105. 1760 GOSUB 2200         ''' UP
  106. 1770 C = 70
  107. 1780 GOSUB 2200         ''' UP
  108. 1790 FOR R = 5 TO 17 STEP 4
  109. 1800 FOR C = 10 TO 70 STEP 10
  110. 1810 LOCATE R,C
  111. 1820 PRINT CHR$(206)
  112. 1830 NEXT C
  113. 1840 NEXT R
  114. 1850 GOTO 2300
  115. 1860 REM *** START OF SUBROUTINE
  116. 1870 REM *** ROUTINE FOR TOP SIDE
  117. 1880 LOCATE R,C                  :REM  print top left hand corner
  118. 1890 PRINT CHR$(201)
  119. 1900 GOTO 1930
  120. 1910 LOCATE R,C
  121. 1920 PRINT CHR$(204)
  122. 1930 FOR I = C+1 TO W
  123. 1940 LOCATE R,I                  :REM  print top side
  124. 1950 PRINT CHR$(205)
  125. 1960 NEXT I
  126. 1970 LOCATE R,W+1
  127. 1980 PRINT CHR$(185)
  128. 1990 RETURN
  129. 2000 REM *** ROUTINE FOR RIGHT HAND SIDE
  130. 2010 LOCATE R,C+W                :REM  print top right hand corner
  131. 2020 PRINT CHR$(187)
  132. 2030 FOR I = R+1 TO R+H
  133. 2040 LOCATE I,C+W                :REM  print right hand side
  134. 2050 PRINT CHR$(186)
  135. 2060 NEXT I
  136. 2070 RETURN
  137. 2080 REM *** ROUTINE FOR BOTTOM SIDE
  138. 2090 LOCATE R+H,C+W              :REM  print bottom right corner
  139. 2100 PRINT CHR$(188)
  140. 2110 FOR I = C+W-1 TO C+1 STEP -1
  141. 2120 LOCATE R+H,I                :REM  print bottom side
  142. 2130 PRINT CHR$(205)
  143. 2140 NEXT I
  144. 2150 RETURN
  145. 2160 REM *** ROUTINE FOR LEFT HAND SIDE
  146. 2170 LOCATE R+H,C                :REM  print bottom left corner
  147. 2180 PRINT CHR$(200)
  148. 2190 GOTO 2220
  149. 2200 LOCATE R+H, C
  150. 2210 PRINT CHR$(202)
  151. 2220 FOR I = R+H-1 TO R+1 STEP -1
  152. 2230 LOCATE I,C                  :REM  print left hand side
  153. 2240 PRINT CHR$(186)
  154. 2250 NEXT I
  155. 2260 LOCATE R,C
  156. 2270 PRINT CHR$(203)
  157. 2280 RETURN
  158. 2290 END
  159. 2300 REM --- START ROUTINE FOR RANDOM IMAGES
  160. 2310 NUM = CVI(RIGHT$(TIME$,2))
  161. 2320 RANDOMIZE NUM
  162. 2330 REM --- DETERMINE DEGREE OF EXPERTISE
  163. 2340 LOCATE 22,1
  164. 2350 PRINT "ENTER DESIRED WAIT TIME:  1, 2, 3, OR 4 SECONDS"
  165. 2360 A$ = INKEY$
  166. 2370 IF A$ = "" THEN 2360
  167. 2380 DIF = VAL(A$)
  168. 2390 IF DIF < 1 THEN 2360
  169. 2400 IF DIF > 4 THEN 2360
  170. 2410 LOCATE 23,40
  171. 2420 PRINT "         DELAY TIME WILL BE "; DIF; " SECONDS"
  172. 2430 REM --- SET UP INITIAL VALUES
  173. 2440 FOR I = 1 TO 20
  174. 2450 SET(I) = I
  175. 2460 SET(20+I) = I
  176. 2470 NEXT I
  177. 2480 REM --- TRANSFER INITIAL VALUES TO RANDOM VALUES ON SCREEN
  178. 2490 FOR I = 1 TO 5
  179. 2500 FOR J = 1 TO 8
  180. 2510 NUM = INT(40*RND(NUM) + 1)
  181. 2520 IF SET(NUM) = 0 THEN 2510
  182. 2530 TUBE(I,J) = SET(NUM)
  183. 2540 SET(NUM) = 0
  184. 2550 NEXT J
  185. 2560 NEXT I
  186. 2570 REM --- PRINT OUT VALUES
  187. 2580 FOR I = 1 TO 5
  188. 2590 FOR J = 1 TO 8
  189. 2600 LOCATE I*4-1, (J-1)*10+3
  190. 2610 IF FIRST = 1 THEN 2640
  191. 2620 GOSUB 3960
  192. 2630 GOTO 2650
  193. 2640 PRINT TUBE(I,J)
  194. 2650 NEXT J
  195. 2660 NEXT I
  196. 2670 REM --- NUMBER THE SCREEN
  197. 2680 FOR I = 1 TO 5
  198. 2690 FOR J = 1 TO 8
  199. 2700 LOCATE I*4-1, (J-1)*10+3
  200. 2710 PRINT I; J
  201. 2720 NEXT J
  202. 2730 NEXT I
  203. 2740 REM -- START GUESSING PROCESS
  204. 2750 LOCATE 22,1
  205. 2760 PRINT "ROW =      COLUMN =      AND      ROW =      COLUMN =      "
  206. 2770 A$ = INKEY$
  207. 2780 IF A$ = "" THEN 2770
  208. 2790 I = VAL(A$)
  209. 2800 IF I <> 0 THEN 2840
  210. 2810 IF LEN(A$) = 1 THEN 2770
  211. 2820 BEEP
  212. 2830 GOTO 3770
  213. 2840 LOCATE 22,7
  214. 2850 PRINT A$
  215. 2860 A$ = INKEY$
  216. 2870 IF A$ = "" THEN 2860
  217. 2880 J = VAL(A$)
  218. 2890 IF J <> 0 THEN 2930
  219. 2900 IF LEN(A$) = 1 THEN 2860
  220. 2910 BEEP
  221. 2920 GOTO 3770
  222. 2930 LOCATE 22,21
  223. 2940 PRINT A$
  224. 2950 A$ = INKEY$
  225. 2960 IF A$ = "" THEN 2950
  226. 2970 L = VAL(A$)
  227. 2980 IF L <> 0 THEN 3020
  228. 2990 IF LEN(A$) = 1 THEN 2950
  229. 3000 BEEP
  230. 3010 GOTO 3770
  231. 3020 LOCATE 22,41
  232. 3030 PRINT A$
  233. 3040 A$ = INKEY$
  234. 3050 IF A$ = "" THEN 3040
  235. 3060 M = VAL(A$)
  236. 3070 IF M <> 0 THEN 3110
  237. 3080 IF LEN(A$) = 1 THEN 3040
  238. 3090 BEEP
  239. 3100 GOTO 3770
  240. 3110 LOCATE 22,55
  241. 3120 PRINT A$
  242. 3130 REM --- CHECK TO SEE IF SAME SPOT
  243. 3140 IF I <> L THEN 3200
  244. 3150 IF J <> M THEN 3200
  245. 3160 BEEP
  246. 3170 LOCATE 23,1
  247. 3180 PRINT "SAME SQUARE, GO AGAIN "
  248. 3190 GOTO 2740
  249. 3200 REM --- CHECK TO SEE IF VALID SUBSCRIPT
  250. 3210 IF I < 6 THEN 3260
  251. 3220 BEEP
  252. 3230 LOCATE 23,1
  253. 3240 PRINT "INVALID NUMBER........"
  254. 3250 GOTO 2740
  255. 3260 IF J > 8 THEN 3220
  256. 3270 IF L > 5 THEN 3220
  257. 3280 IF M > 8 THEN 3220
  258. 3290 REM --- CHECK TO SEE IF VALID SUBSCRIPT
  259. 3300 IF TUBE(I,J) = 0 THEN 3330
  260. 3310 IF TUBE(L,M) = 0 THEN 3330
  261. 3320 GOTO 3370
  262. 3330 LOCATE 23,1
  263. 3340 BEEP
  264. 3350 PRINT "KNOWN SQUARE, GO AGAIN"
  265. 3360 GOTO 2740
  266. 3370 REM --- DISPLAY VALUES
  267. 3380 COUNT = COUNT + 1
  268. 3390 LOCATE I*4-1, (J-1)*10+3
  269. 3400 PRINT "     "
  270. 3410 LOCATE I*4-1, (J-1)*10+3
  271. 3420 IF FIRST = 1 THEN 3450
  272. 3430 GOSUB 3960
  273. 3440 GOTO 3460
  274. 3450 PRINT TUBE(I,J)
  275. 3460 LOCATE L*4-1, (M-1)*10+3
  276. 3470 PRINT "     "
  277. 3480 LOCATE L*4-1, (M-1)*10+3
  278. 3490 IF FIRST = 1 THEN 3520
  279. 3500 GOSUB 3990
  280. 3510 GOTO 3530
  281. 3520 PRINT TUBE(L,M)
  282. 3530 REM --- CHECK FOR MATCHES
  283. 3540 IF TUBE(I,J) = TUBE(L,M) THEN 3650
  284. 3550 LOCATE 23,1
  285. 3560 PRINT "THEY DO NOT MATCH     "
  286. 3570 T1 = VAL(RIGHT$(TIME$,2))
  287. 3580 T2 = VAL(RIGHT$(TIME$,2))
  288. 3590 IF ABS(T1-T2) < DIF THEN 3580
  289. 3600 LOCATE I*4-1, (J-1)*10+3
  290. 3610 PRINT I; J
  291. 3620 LOCATE L*4-1, (M-1)*10+3
  292. 3630 PRINT L; M
  293. 3640 GOTO 2740
  294. 3650 REM --- THE SQUARES MATCH
  295. 3660 BEEP
  296. 3670 LOCATE 23,1
  297. 3680 PRINT "THEY MATCH............"
  298. 3690 LOCATE I*4-1, (J-1)*10+3
  299. 3700 PRINT CHR$(17); CHR$(219); CHR$(219); CHR$(16)
  300. 3710 LOCATE L*4-1, (M-1)*10+3
  301. 3720 PRINT CHR$(17); CHR$(219); CHR$(219); CHR$(16)
  302. 3730 TUBE(I,J) = 0
  303. 3740 TUBE(L,M) = 0
  304. 3750 MATCH = MATCH + 1
  305. 3760 IF MATCH < 20 THEN 2740
  306. 3770 REM --- TIME TO MOVE ON
  307. 3780 LOCATE 23,1
  308. 3790 BEEP
  309. 3800 PRINT "THIS GAME IS OVER ---- "
  310. 3810 BEEP
  311. 3820 LOCATE 23,23
  312. 3830 PRINT "IT TOOK YOU "; COUNT; "TURNS  "
  313. 3840 IF FIRST = 2 THEN 3920
  314. 3850 LOCATE 23,47
  315. 3860 PRINT "  PRESS ANY KEY FOR GAME 2      "
  316. 3870 A$ = INKEY$
  317. 3880 IF A$ = "" THEN 3870
  318. 3890 FIRST = 2
  319. 3900 CLS
  320. 3910 GOTO 1450
  321. 3920 LOCATE 23,47
  322. 3930 PRINT "                                "
  323. 3940 LOCATE 23,1
  324. 3950 END
  325. 3960 REM --- ROUTINE TO PRINT OUT CHR$
  326. 3970 CHAR = TUBE(I,J)
  327. 3980 GOTO 4000
  328. 3990 CHAR = TUBE(L,M)
  329. 4000 ON CHAR GOTO 4010,4030,4050,4070,4090,4110,4130,4150,4170,4190,4210,4230,4250,4270,4290,4310,4330,4350,4370,4390
  330. 4010 PRINT CHR$(17); CHR$(219); CHR$(219) CHR$(16)        '' 1
  331. 4020 RETURN
  332. 4030 PRINT CHR$(221); CHR$(220); CHR$(223) CHR$(222)     '' 2
  333. 4040 RETURN
  334. 4050 PRINT CHR$(204); CHR$(205); CHR$(205) CHR$(185)     '' 3
  335. 4060 RETURN
  336. 4070 PRINT CHR$(204); CHR$(206); CHR$(206) CHR$(185)     '' 4
  337. 4080 RETURN
  338. 4090 PRINT CHR$(219); CHR$(16); CHR$(17) CHR$(219)     '' 5
  339. 4100 RETURN
  340. 4110 PRINT CHR$(17); CHR$(16); CHR$(17) CHR$(16)         '' 6
  341. 4120 RETURN
  342. 4130 PRINT CHR$(211); CHR$(210); CHR$(210) CHR$(189)     '' 7
  343. 4140 RETURN
  344. 4150 PRINT CHR$(204); CHR$(188); CHR$(200) CHR$(185)     '' 8
  345. 4160 RETURN
  346. 4170 PRINT CHR$(26); CHR$(24); CHR$(25) CHR$(27)         '' 9
  347. 4180 RETURN
  348. 4190 PRINT CHR$(1); CHR$(2); CHR$(2) CHR$(1)             '' 10
  349. 4200 RETURN
  350. 4210 PRINT CHR$(220); CHR$(223); CHR$(223) CHR$(220)     '' 1/2
  351. 4220 RETURN
  352. 4230 PRINT CHR$(220); CHR$(223); CHR$(220) CHR$(223)     '' 2/2
  353. 4240 RETURN
  354. 4250 PRINT CHR$(214); CHR$(215); CHR$(215) CHR$(183)     '' 3/2
  355. 4260 RETURN
  356. 4270 PRINT CHR$(17); CHR$(205); CHR$(205) CHR$(16)       '' 4/2
  357. 4280 RETURN
  358. 4290 PRINT CHR$(14); CHR$(14); CHR$(14) CHR$(14)     '' 5/2
  359. 4300 RETURN
  360. 4310 PRINT CHR$(19); CHR$(19); CHR$(19) CHR$(19)     '' 6/2
  361. 4320 RETURN
  362. 4330 PRINT CHR$(178); CHR$(176); CHR$(176) CHR$(178)     '' 7/2
  363. 4340 RETURN
  364. 4350 PRINT CHR$(201); CHR$(203); CHR$(203) CHR$(187)
  365. 4360 RETURN
  366. 4370 PRINT CHR$(200); CHR$(239); CHR$(239) CHR$(188)
  367. 4380 RETURN
  368. 4390 PRINT CHR$(21); CHR$(15); CHR$(15) CHR$(21)
  369. 4400 RETURN
  370. 0 PRINT CHR$(200); CHR$(23